<?php
//permet de faire le mapping objet-relationnel des salles objet<-->salles bd
Class SalleDAOMysql implements iDAO{
	
	
	protected $connexion;
	protected $table='salle';
	
	public function __construct (){
		//recupere la connexion
		$this->connexion=Connexion::getInstance()->getConnexion();
	}
	
	//recupere toutes les salles
	public function getAll(){
	  $sql = "SELECT * FROM ".$this->table;
	  return $this->executeQuery($sql);
	}
	
	//recupere une salle par son id
	public function getById($id){
	  $sql = "SELECT * FROM ".$this->table ." WHERE ID=".$id;
	  return $this->executeQuery($sql);
	}
	
		//recupere une salle par son nom
	public function getByName($nom){
	  $sql = "SELECT * FROM ".$this->table ." WHERE NOM_SALLE LIKE '%".$nom."%'";
	  return $this->executeQuery($sql);
	}
	
	
	
	//ici on execute une requete de type select et on renvoie un tableau composé d'objets
	public function executeQuery($sql) {
		
		$TabObjets = array();
        $result =$this->connexion->query($sql);
		$this->throwExceptionOnError();
		
		
		 if($result) {
           while($row = $result->fetch_object()){
					//on effectue le mapping entre nos objets et les données de la base
                	$salle = new Salle();
                	$salle->setId($row->ID);
                	$salle->setNomSalle(stripslashes($row->NOM_SALLE));
					$salle->setNbPlacesSalle($row->NB_PLACES_SALLE);
					$TabObjets[]=$salle;
			}
		}
		
		return $TabObjets;
	}

	//la fonction permet de rechercher avant un insert(si l'objet existe) ou un update (si on est bien train d'updater le bon enregistrement 
	public function research($salle)
	{
	
		$Tab=array();
		$sql = "SELECT * FROM ".$this->table ." WHERE NOM_SALLE='".$salle->getNomSalle()."'";
		$Tab=$this->executeQuery($sql);
	
		switch (count($Tab)){
			
			case 0:
					return true;
					break;
			
			case 1:
			
				if ($salle->getId()==$Tab[0]->getId()){
					return true;
					break;
				}
				else{
					return false;
					break;
				}
			
			default:
					return false;
					break;
		}
	}
	
	
	
 //methode permettant de modifier une salle en bd
	public function update($salle) {
		
		$sql="UPDATE ".$this->table." SET NOM_SALLE=?, NB_PLACES_SALLE=?  WHERE ID=?";
			//on prepare la requete
			$stmt = $this->connexion->prepare($sql);
			//on rempli avec les parametres necessaires à la requete parametree
			$stmt->bind_param('sii', $salle->getNomSalle(), $salle->getNbPlacesSalle(),$salle->getId());
			//on execute la requete
         	$stmt->execute();
			$this->throwExceptionOnError();
			
	}
	

		
 //methode permettant d inserer une salle en bd
	public function insert($salle) {
		
		$sql="INSERT INTO ".$this->table." (NOM_SALLE ,NB_PLACES_SALLE) VALUES(?,?)";
		//on prepare la requete
		$stmt = $this->connexion->prepare($sql);
		//on rempli avec les parametres necessaires à la requete parametree
		$stmt->bind_param('ss', $salle->getNomSalle(), $salle->getNbPlacesSalle());
		//on execute la requete
		$stmt->execute();
		$this->throwExceptionOnError();
	    return $this->connexion->insert_id;
	
	}
	
	//supression d'une salle
	public function delete($id){

		 $sql = "DELETE  FROM ".$this->table ." WHERE ID=?";
	 	 $stmt = $this->connexion->prepare($sql);
	     $stmt->bind_param('i', $id);
	 	 $stmt->execute(); 
	 	 $this->throwExceptionOnError();
	}

	
	
	//si quelque chose c'est mal passé
	private function throwExceptionOnError(){
	
		if($this->connexion->error){
			throw new Exception('Erreur mysql'.$this->connexion->error);
		}
	}
	
	
}

?>